/*
Copyright 2024 New Vector Ltd.
Copyright 2019 The Matrix.org Foundation C.I.C.
Copyright 2015, 2016 OpenMarket Ltd

SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/

:root {
    --AppTile_mini-height: 220px;
}

.mx_AppsDrawer {
    --minWidth: 240px; /* TODO this should be 300px but that's too large */

    margin: var(--container-gap-width);
    /* The left side gap is fully handled by this margin. To prohibit bleeding on webkit browser. */
    margin-right: calc(var(--container-gap-width) / 2);
    margin-bottom: 0; /* No bottom margin for the correct gap to the CallView below. */
    position: relative;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    flex-grow: 1;

    .mx_AppsDrawer_resizer {
        margin-bottom: var(--container-gap-width);
    }

    .mx_AppsDrawer_resizer_container {
        width: 100%;
        height: 10px;
        display: block;
        position: relative;

        .mx_AppsDrawer_resizer_container_handle {
            cursor: ns-resize;

            /* Override styles from library, making the whole area the target area */
            width: 100% !important;
            height: 100% !important;

            /* This is positioned directly below frame */
            position: absolute;
            bottom: 50% !important; /* override from library */

            /* We then render the pill handle in an ::after to keep it in the handle's */
            /* area without being a massive line across the screen */
            &::after {
                content: "";
                position: absolute;
                border-radius: 3px;

                height: 4px;
                bottom: 0;

                /* Together, these make the bar 64px wide */
                /* These are also overridden from the library */
                left: calc(50% - 32px);
                right: calc(50% - 32px);
            }
        }
    }

    &:hover {
        .mx_AppsDrawer_resizer_container_handle::after {
            opacity: 0.8;
            background: $primary-content;
        }

        .mx_ResizeHandle--horizontal::before {
            position: absolute;
            left: 3px;
            top: 50%;
            transform: translate(0, -50%);

            height: 64px; /* to match width of the ones on roomlist */
            width: 4px;
            border-radius: 4px;

            content: "";

            background-color: $primary-content;
            opacity: 0.8;
        }
    }

    .mx_AppTile {
        width: 50%;
        min-width: var(--minWidth);
    }

    &.mx_AppsDrawer--maximised {
        margin-bottom: var(--container-gap-width);
    }

    &.mx_AppsDrawer--resizing .mx_AppTile_persistedWrapper {
        z-index: 1;
    }

    &.mx_AppsDrawer--2apps .mx_AppTile {
        width: 50%;

        &:nth-child(3) {
            flex-grow: 1;
            width: 0 !important;
            min-width: var(--minWidth) !important;
        }
    }
    &.mx_AppsDrawer--3apps .mx_AppTile {
        width: 33%;

        &:nth-child(3) {
            flex-grow: 1;
            width: 0 !important;
            min-width: var(--minWidth) !important;
        }
    }
}

.mx_AppsContainer {
    display: flex;
    flex-direction: row;
    align-items: stretch;
    justify-content: center;
    height: 100%;
    width: 100%;
    flex: 1;
    min-height: 0;

    .mx_AppTile:first-of-type {
        border-left-width: var(--container-border-width);
        border-radius: 10px 0 0 10px;
    }
    .mx_AppTile:last-of-type {
        border-right-width: var(--container-border-width);
        border-radius: 0 10px 10px 0;
    }

    .mx_ResizeHandle--horizontal {
        position: relative;

        > div {
            width: 0;
        }
    }
}

.mx_AppTile {
    border: var(--container-border-width) solid $widget-menu-bar-bg-color;
    display: flex;
    flex-direction: column;
    box-sizing: border-box;
    background-color: $widget-menu-bar-bg-color;
}

.mx_AppTileFullWidth {
    width: 100% !important; /* to override the inline style set by the resizer */
    margin: 0;
    padding: 0;
    border: var(--container-border-width) solid $widget-menu-bar-bg-color;
    border-radius: 8px;
    display: flex;
    flex-direction: column;
    background-color: $widget-menu-bar-bg-color;
}

.mx_AppTile_mini {
    width: 100%;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    height: var(--AppTile_mini-height);
}

.mx_AppTile .mx_AppTile_persistedWrapper,
.mx_AppTileFullWidth .mx_AppTile_persistedWrapper,
.mx_AppTile_mini .mx_AppTile_persistedWrapper {
    flex: 1;
}

.mx_AppTile_persistedWrapper div {
    width: 100%;
    height: 100%;
}

.mx_AppTileMenuBar {
    margin: 0;
    font-size: $font-12px;
    background-color: $widget-menu-bar-bg-color;
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    padding-top: 3px;
    padding-bottom: 6px;

    .mx_AppTileMenuBar_title {
        line-height: 20px;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;

        .mx_WidgetAvatar {
            margin-right: 12px;
        }

        h1 {
            font-size: inherit;
            margin: 0;
        }

        > :last-child {
            margin-left: 9px;
            display: flex;
            justify-content: center;
            align-items: center;
        }
    }

    .mx_AppTileMenuBar_widgets {
        display: flex;
        align-items: center;

        .mx_AppTileMenuBar_widgets_button {
            --size: 24px; /* Size of the button. Its height and width values should be same */

            margin: 0 4px;
            position: relative;
            height: var(--size);
            width: var(--size);
            display: flex;
            align-items: center;
            justify-content: center;

            &:hover::after {
                content: "";
                position: absolute;
                height: var(--size);
                width: var(--size);
                background-color: $panel-actions;
                border-radius: 50%;
                left: 0;
                top: 0;
            }

            .mx_Icon {
                color: $muted-fg-color;
            }
        }
    }
}

/* Rules added to this selector style appTileBody generally */
.mx_AppTileBody {
    /* Apply to every variant of appTileBody */
    border-radius: 8px;

    /* const loadingElement */
    /* Note the loading spinner and the message next to it are not always included in mx_AppTileBody--loading */
    .mx_AppTileBody_fadeInSpinner {
        /* place spinner and the message at the center of mx_AppTileBody */
        height: 100%;
        width: 100%;

        font-weight: bold; /* message next to the spinner */
        animation-fill-mode: backwards;
        animation-duration: 200ms;
        animation-delay: 500ms;
        animation-name: mx_AppTileBody_fadeInSpinnerAnimation;
    }

    &.mx_AppTileBody--large,
    &.mx_AppTileBody--mini {
        width: 100%;
        overflow: hidden;
        height: var(--AppTileBody-height);

        iframe {
            border: none;
            width: 100%;
            height: 100%;
        }
    }

    &.mx_AppTileBody--large {
        --AppTileBody-height: 100%;

        background-color: $widget-body-bg-color;

        iframe {
            overflow: hidden;
            padding: 0;
            margin: 0;
            display: block;
        }
    }

    &.mx_AppTileBody--mini {
        --AppTileBody-height: var(--AppTile_mini-height);
    }

    &.mx_AppTileBody--loading {
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        position: relative;
        height: 100%;

        /* match bg of border so that the cut corners have the right fill */
        background-color: $widget-body-bg-color !important;

        iframe {
            display: none;
        }
    }

    &.mx_AppTileBody--call {
        border-radius: 0px;
    }
    &.mx_AppTileBody--call.mx_AppTileBody--mini {
        border-radius: 8px;
    }
}

/* appTileBody is embedded to PersistedElement outside of mx_AppTile,
   so rules to style appTileBody generally should not be included here. */
.mx_AppTile .mx_AppTileBody--large,
.mx_AppTileFullWidth .mx_AppTileBody--large,
.mx_AppTile_mini .mx_AppTileBody--mini {
    height: inherit;
    flex: 1;
}

@keyframes mx_AppTileBody_fadeInSpinnerAnimation {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}
